package com.chenailin.www.util;

import java.io.InputStream;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

public class DBUtil {
    //用户名、密码、URL、驱动类定义为常量
    private static String USER = null;
    private static String PWD = null;
    private static String URL = null;
    private static String DRIVER = null;
    private static Connection conn;
    //该类不能被实例化
    private DBUtil() {
    }

    //在程序运行过程中,只需要做一次的注册驱动的代码放在静态代码块里面
    static {
        try {
            InputStream in=DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties=new Properties();
            properties.load(in);
            DRIVER=properties.getProperty("DRIVER");
            USER=properties.getProperty("USER");
            PWD=properties.getProperty("PWD");
            URL=properties.getProperty("URL");
            Class.forName(DRIVER);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("mysql驱动注册失败!");
        }
    }

//    static {
//        try {
//            // 调试：打印当前类路径
//            URL resource = DBUtil.class.getClassLoader().getResource("db.properties");
//            System.out.println("配置文件路径: " + (resource != null ? resource.getPath() : "未找到"));
//
//            InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
//            if (in == null) {
//                throw new RuntimeException("配置文件未找到！请检查路径: " + System.getProperty("java.class.path"));
//            }
//
//            Properties properties = new Properties();
//            properties.load(in);
//            // ...其他初始化代码...
//        } catch (Exception e) {
//            throw new RuntimeException("初始化失败", e);
//        }
//    }
//
//    static {
//        try (InputStream input = DBUtil.class.getClassLoader().getResourceAsStream("db.properties")) {
//            // 添加调试日志
//            System.out.println("正在加载配置文件，input 是否为 null: " + (input == null));
//
//            if (input == null) {
//                throw new RuntimeException("配置文件未找到！当前类路径: "
//                        + DBUtil.class.getClassLoader().getResource("").getPath());
//            }
//            // ... 其他代码 ...
//        } catch (Exception e) {
//            throw new RuntimeException("初始化失败", e);
//        }
//    }

    //得到数据库的连接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL,USER,PWD);
    }

    //关闭所有打开的资源（但这个基本用不上，因为前面的方法都使用了try-with-resources自动管理PreparedStatement，无需手动关闭）
    public static void release(Connection conn, Statement st, ResultSet rs) {
        if(rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(st != null) {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}